using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 8/9/2013 9:30:36 AM
    /// </summary>
    [Serializable]
    public class AlertaLista : ReadOnlyListBase<AlertaLista, AlertasInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(AlertaLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static AlertaLista GetAlertaLista(AlertaCriteriaSingleCriteria filter)
        {
            return DataPortal.Fetch<AlertaLista>(filter);
        }
        public static AlertaLista GetAlertaLista(AlertaDeleteCriteria filter)
        {
            return DataPortal.Fetch<AlertaLista>(filter);
        }
        private AlertaLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(AlertaCriteriaSingleCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
            {
                new Parametro("ec_exp_id", criteria.ExpedienteId),
                new Parametro("et_ale_fecha_configura", criteria.FechaConfigura),
                new Parametro("ec_ale_estado", criteria.Estado),
                new Parametro("ec_ale_remitente", criteria.RemiteId),
                new Parametro("ec_ale_visualizada", criteria.Visualiza),
                new Parametro("ec_rol", criteria.CodigoRol)
            };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_ALERTA\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(AlertasInfo.GetAlertaInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        private void DataPortal_Fetch(AlertaDeleteCriteria criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
           
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
            {
                new Parametro("ec_exp_id", criteria.ExpedienteId),
                new Parametro("et_ale_fecha_configura", criteria.FechaConfigura),
                new Parametro("et_ale_fecha_ejecuta", criteria.FechaEjecuta),
                new Parametro("ec_ale_estado", criteria.Estado),
                new Parametro("ec_ale_remitente", criteria.RemiteId),
                new Parametro("ec_ale_visualizada", criteria.Visualiza),
                new Parametro("ec_rol", criteria.CodigoRol)
              
            };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_ALERTA_BORRADOS\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(AlertasInfo.GetAlertaInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 8/9/2013 9:30:36 AM
    /// </summary>
    [Serializable]
    public class AlertasInfo : ReadOnlyBase<AlertasInfo>
    {
        #region Business Methods

        public Guid Id { get; internal set; }
        public string ExpedienteId { get; internal set; }
        public string ExpedienteNombre { get; internal set; }
        public string Asunto { get; internal set; }
        public string Mensaje { get; internal set; }
        public DateTime FechaConfig { get; internal set; }
        public DateTime FechaEjecuta { get; internal set; }
        public string Visualiza { get; internal set; }
        public string Estado { get; internal set; }
        public string RemitenteId { get; internal set; }
        public string EmisorId { get; internal set; }
        public string FaseId { get; internal set; }
        public string Emisor { get; internal set; }
        #endregion

        #region Factory Methods

        internal static AlertasInfo GetAlertaInfo(DataRow childData)
        {
            return DataPortal.FetchChild<AlertasInfo>(childData);
        }

        private AlertasInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access
        //                                        

        private void Child_Fetch(DataRow childData)
        {
            Id = Guid.Parse(childData["ale_id"].ToString());
            if (!(childData["exp_id"] is DBNull))
            {
                ExpedienteId = (childData["exp_id"].ToString());
            }
            if (!(childData["exp_nombre"] is DBNull))
            {
                ExpedienteNombre = childData["exp_nombre"].ToString();
            }
            Asunto = childData["ale_asunto"].ToString();
            Mensaje = childData["ale_mensaje"].ToString();
            FechaConfig = DateTime.Parse(childData["ale_fecha_configura"].ToString());
            FechaEjecuta = DateTime.Parse(childData["ale_fecha_ejecuta"].ToString());
            Visualiza = childData["ale_visualizada"].ToString();

            Estado = childData["ale_estado"].ToString();

            RemitenteId = childData["ale_remitente"].ToString();
            if (!(childData["ale_emisor"] is DBNull))
                EmisorId = childData["ale_emisor"].ToString();
            if (!(childData["ale_codigo_fase"] is DBNull))
                FaseId = childData["ale_codigo_fase"].ToString();
            if (!(childData["nombre_emisor"] is DBNull))
                Emisor = childData["nombre_emisor"].ToString();

        }

        #endregion
    }
}
